﻿using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Globalization;
using AudiPyme.BLL;
using System.IO;
using System.Data;
using AudiPyme.DAL;


namespace AudiPyme.UI
{
    public partial class EmpresaDatos : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                try
                {
                    String NombreUsuario = (String)Session["nombreUsuario"];
                    int EmpresaUsuario = UsuariosFactory.EmpresaUsuario(NombreUsuario);
                    if (EmpresaUsuario != 0)
                    {
                        //Se recogen los datos de la empresa para mostrarlos en el formulario
                        PanelDatos.Visible = true;
                        LblNombreEmpresa.Text = ": " + EmpresasFactory.NombreEmpresa(EmpresaUsuario);
                        TxtNombre.Text = EmpresasFactory.NombreEmpresa(EmpresaUsuario);
                        String Sector = EmpresasFactory.SectorEmpresa(EmpresaUsuario);
                        DdlSector.SelectedValue = Sector;
                        String TipoEmpresa = EmpresasFactory.TipoEmpresaEmpresa(EmpresaUsuario);
                        DdlTipoEmpresa.SelectedValue = TipoEmpresa;
                        TxtNumAsalariados.Text = EmpresasFactory.NumeroEmpleados(EmpresaUsuario);
                    }
                    else
                    {
                        MuestraMensaje("El usuario " + NombreUsuario + " no esta asociado a una empresa");
                    }
                }
                catch (Exception e1)
                {
                    e1.ToString();
                    MuestraMensaje("Error al recoger los datos de la empresa");
                }
            }
        }

        //Comprueba que el número de empleados introducido se corresponde con el tamaño de la empresa
        private bool CompruebaEmpleados(int NumEmpleados, int IdTipoEmpresa)
        {
            bool ok = true;
            switch (IdTipoEmpresa)
            {
                case 1:
                    if (NumEmpleados > 9)
                        ok = false;
                    break;
                case 2:
                    if (NumEmpleados > 49 || NumEmpleados < 10)
                        ok = false;
                    break;
                case 3:
                    if (NumEmpleados < 50 || NumEmpleados > 249)
                        ok = false;
                    break;
            }
            return ok;
        }

        protected void BtnActualizar_Click(object sender, EventArgs e)
        {
            Page.Validate("ValidarFormulario");
            if (Page.IsValid)
            {
                String NombreUsuario = (String)Session["nombreUsuario"];
                int EmpresaUsuario = UsuariosFactory.EmpresaUsuario(NombreUsuario);
                if (EmpresaUsuario != 0)
                {
                    try
                    {
                        //Recogemos los valores de sector y tipo empresa seleccionados
                        String NombreEmpresa = TxtNombre.Text;
                        String NombreSector = DdlSector.SelectedValue;
                        String NombreTipoEmpresa = DdlTipoEmpresa.SelectedValue;
                        //Recogemos los Id's asociados al Sector y Tipo de Empresa elegidos
                        int IdSector = SectoresFactory.IdSectorEmpresa(NombreSector);
                        int IdTipoEmpresa = TipoEmpresaFactory.IdTipoEmpresa(NombreTipoEmpresa);
                        int NumEmpleados = int.Parse(TxtNumAsalariados.Text);
                        //Compruebo que el Número de Empleados introducido concuerda con el Tipo de Empresa seleccionado
                        if (CompruebaEmpleados(NumEmpleados, IdTipoEmpresa))
                        {
                            //Actualizamos los valores introducidos
                            bool resultado = EmpresasFactory.ActualizaDatosEmpresa(EmpresaUsuario, NombreEmpresa, IdSector, IdTipoEmpresa, NumEmpleados);
                            //Actualizamos los campos de Peso Sector Empresa con los nuevos valores
                            double PesoSectorTipoEmpresa = PesoSectorTipoEmpresaFactory.PesoEmpresaSectorTipoEmpresa(IdSector, IdTipoEmpresa, NumEmpleados);
                            PesoSectorTipoEmpresa = Math.Round(PesoSectorTipoEmpresa, 3);
                            //Se actualizan dichos campos 
                            PesoSectorTipoEmpresaFactory.ActualizaPesoSectorTipoEmpresa(EmpresaUsuario, PesoSectorTipoEmpresa);
                            //Si la empresa tiene un Nivel de Madurez Deseable calculado, lo actualizamos con los datos introducidos
                            int NivelMadurezDeseableEmpresa = EmpresasFactory.MadurezActualEmpresa(EmpresaUsuario);
                            if (NivelMadurezDeseableEmpresa != 0)
                            {
                                //Se recoge el peso TIC
                                double PesoTIC = EmpresasFactory.PesoTICEmpresa(EmpresaUsuario);
                                //Se recoge el peso de la cifra de negocio
                                double PesoCifraNegocio = EmpresasFactory.PesoNegocioEmpresa(EmpresaUsuario);
                                //Se vuelve a calcular el Nivel de Madurez Deseable
                                int NivelMadurezDeseadoEmpresa = EmpresasFactory.CalcularNivelMadurezDeseadaEmpresa(PesoSectorTipoEmpresa, PesoCifraNegocio, PesoTIC, EmpresaUsuario);

                            }
                            if (resultado)
                            {
                                MuestraMensajeRedirige("Campos de la Empresa Actualizados", "EmpresaPrincipal");

                            }
                            else
                            {
                                MuestraMensaje("No se pudo actualizar los atributos de la empresa. Vuelva a intentarlo");
                            }
                        }
                        else
                        {
                            MuestraMensaje("El número de Empleados no se corresponde con el Tipo de Empresa elegido. Corrija los valores");
                            BtnActualizar.Enabled = false;
                        }
                    }
                    catch (Exception e1)
                    {
                        e1.ToString();
                        MuestraMensaje("Error al actualizar los datos de la empresa");
                    }
                }
            }
        }

        private void MuestraMensaje(string Mensaje)
        {
            StringBuilder SB = new StringBuilder();
            SB.Append("alert('");
            SB.Append(Mensaje.Replace("\n", "\\n").Replace("\r", "").Replace("'", "\\'"));
            SB.Append("');");
            ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "showalert", SB.ToString(), true);
        }

        private void MuestraMensajeRedirige(string Mensaje, string Pagina)
        {
            StringBuilder SB = new StringBuilder();
            SB.Append("alert('");
            SB.Append(Mensaje.Replace("\n", "\\n").Replace("\r", "").Replace("'", "\\'"));
            SB.Append("');");
            SB.Append("var Pagina='" + Pagina + ".aspx';var vers = navigator.appVersion;if(vers.indexOf('MSIE 7.0') != -1) { window.location=Pagina;} else{ window.location=Pagina; }");
            ScriptManager.RegisterStartupScript(this, this.GetType(), "Success", SB.ToString(), true);
        }

        protected void BtnEliminar_Click(object sender, EventArgs e)
        {
            try
            {
                String nombreUsuario = (String)Session["nombreUsuario"];
                int IdEmpresa = UsuariosFactory.EmpresaUsuario(nombreUsuario);
                if (IdEmpresa != 0)
                {
                    //Ponemos el atributo de los usuarios asociado a la empresa a NULL.
                    //Recogemos la empresa y la eliminamos
                    Empresas Em = new Empresas();
                    Em = EmpresasFactory.BuscaEmpresa(IdEmpresa);
                    EmpresasFactory.EliminarEmpresa(Em);
                    MuestraMensajeRedirige("Empresa Eliminada Correctamente", "EmpresaCrear");
                }
            }
            catch (System.Threading.ThreadAbortException e1)
            {
                e1.ToString();
                MuestraMensaje("No se pudo eliminar la Empresa");
            }
            catch (Exception e2)
            {
                e2.ToString();
                MuestraMensaje("No se pudo eliminar la Empresa");
            }
        }

        protected void TxtNombre_TextChanged(object sender, EventArgs e)
        {
            BtnActualizar.Enabled = true;
        }

        protected void DdlSector_SelectedIndexChanged(object sender, EventArgs e)
        {
            BtnActualizar.Enabled = true;
        }

        protected void DdlTipoEmpresa_SelectedIndexChanged(object sender, EventArgs e)
        {
            BtnActualizar.Enabled = true;
        }

        protected void TxtNumAsalariados_TextChanged(object sender, EventArgs e)
        {
            BtnActualizar.Enabled = true;
        }

        protected void TxtImporte_TextChanged(object sender, EventArgs e)
        {
            BtnActualizar.Enabled = true;
        }
    }
}